package com_fit.springboot_fit.util;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.security.Key;
import java.util.Date;

@Component
public class JwtTokenUtil {
    // 从配置文件读取密钥和过期时间（建议配置在 application.yml 中）
    @Value("${jwt.secret:defaultSecretKey123456}") // 密钥（实际项目需加长加密）
    private String secret;
    @Value("${jwt.expire:3600000}") // 过期时间：1小时（毫秒）
    private long expire;

    // 生成签名密钥
    private Key getSigningKey() {
        byte[] keyBytes = secret.getBytes();
        return Keys.hmacShaKeyFor(keyBytes);
    }

    // 生成 token（根据用户ID和用户名）
    public String generateToken(Long userId, String username) {
        Date now = new Date();
        Date expiration = new Date(now.getTime() + expire);

        return Jwts.builder()
                .setSubject(userId.toString()) // 存储用户ID
                .claim("username", username) // 附加用户名
                .setIssuedAt(now) // 签发时间
                .setExpiration(expiration) // 过期时间
                .signWith(getSigningKey(), SignatureAlgorithm.HS256) // 签名算法
                .compact();
    }
}